/**
 * Sistem Informasi Penjualan
 * @author Kelompok 1
 * Ligar Sekar Wangi
 * Tri Maryani
 * Winda Rahadyan
 * TIF/IV/A
 */

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
import javax.swing.table.DefaultTableModel;

public class Pesanan extends JInternalFrame {

	private JPanel 		jpPesanan 			= new JPanel ();
	
	
	private JLabel 		lblMaster    		= new JLabel (new ImageIcon ("Gambar/EntriMasterPesanan.jpg")),
						lblDetil    		= new JLabel (new ImageIcon ("Gambar/EntriDetilBarang.jpg")),
						lblNo_Pesan			= new JLabel ("No. Pesan :"),
						lblKode_Pelanggan	= new JLabel ("Kode Pelanggan :"), 
						lblNama_Pelanggan	= new JLabel ("Nama Pelanggan :"), 
						lblTgl_Pesan		= new JLabel ("Tgl. Pesan :"), 
						lblInfoTanggal 		= new JLabel ("yyyy/mm/dd");
						
	private JTextField 	txtNo_Pesan			= new JTextField (), 
						txtKode_Pelanggan	= new JTextField (), 
						txtNama_Pelanggan	= new JTextField (), 
						txtTgl_Pesan		= new JTextField ();
	
	private JButton 	btnTambahMaster		= new JButton (new ImageIcon ("Gambar/Tambah.jpg")), 
						btnUbahMaster		= new JButton (new ImageIcon ("Gambar/Ubah.jpg")), 
						btnHapusMaster		= new JButton (new ImageIcon ("Gambar/Hapus.jpg")), 
						btnBersihMaster		= new JButton (new ImageIcon ("Gambar/Bersih.jpg"));	

	
	private JLabel 		lblKode_Barang		= new JLabel ("Kode :"), 
						lblNama_Barang		= new JLabel ("Nama Barang :"), 
						lblSatuan			= new JLabel ("Satuan :"), 
						lblHarga			= new JLabel ("Harga :"), 
						lblJumlah			= new JLabel ("Jumlah :");

	private JTextField 	txtKode_Barang		= new JTextField (), 
						txtNama_Barang		= new JTextField (), 
						txtSatuan			= new JTextField (), 
						txtHarga			= new JTextField (), 
						txtJumlah			= new JTextField ();
	private JButton 	btnTambahDetil		= new JButton (new ImageIcon ("Gambar/Tambah.jpg")), 
						btnUbahDetil		= new JButton (new ImageIcon ("Gambar/Ubah.jpg")), 
						btnHapusDetil		= new JButton (new ImageIcon ("Gambar/Hapus.jpg")), 
						btnBersihDetil		= new JButton (new ImageIcon ("Gambar/Bersih.jpg")), 
						btnSelesaiDetil		= new JButton ("Selesai Detil");	


	//deklarasi objek tabel
  	String[] strJdl = {"No.","Kode Barang","Nama","Satuan","Harga","Jumlah","Total"};
	DefaultTableModel tabMode;
	JTable tabel = new JTable();
	JScrollPane skrTabel = new JScrollPane();

	Pesanan ( ) {

		// super(Judul, UkuranFrame, TombolClose, TombolMaksimum, TombolMinimum)
		super ("Data Entri Pemesanan Barang", false, true, false, true);
		setSize (700, 420);

		jpPesanan.setLayout (null);		

		lblMaster.setHorizontalAlignment(JLabel.LEFT);
		lblDetil.setHorizontalAlignment(JLabel.LEFT);
		
		// mengatur letak objek di atas panel
		lblMaster.setBounds (15, 15, 250, 30);
		lblDetil.setBounds (15, 170, 250, 30);
		lblInfoTanggal.setBounds (305, 140, 150, 25);
		
		lblNo_Pesan.setBounds (70, 50, 120, 25);
		lblKode_Pelanggan.setBounds (70, 80, 120, 25);
		lblNama_Pelanggan.setBounds (70, 110, 120, 25);
		lblTgl_Pesan.setBounds (70, 140, 120, 25);
		
		lblKode_Barang.setBounds (70, 200, 50, 25);
		lblNama_Barang.setBounds (125, 200, 200, 25);
		lblSatuan.setBounds (330, 200, 75, 25);
		lblHarga.setBounds (410, 200, 75, 25);
		lblJumlah.setBounds (490, 200, 50, 25);
		
		txtNo_Pesan.setBounds (200, 50, 100, 25);
		txtKode_Pelanggan.setBounds (200, 80, 100, 25);
		txtNama_Pelanggan.setBounds (200, 110, 250, 25);
		txtTgl_Pesan.setBounds (200, 140, 100, 25);
		
		txtKode_Barang.setBounds (70, 220, 50, 25);
		txtNama_Barang.setBounds (125, 220, 200, 25);
		txtSatuan.setBounds (330, 220, 75, 25);
		txtHarga.setBounds (410, 220, 75, 25);
		txtJumlah.setBounds (490, 220, 50, 25);

		btnTambahMaster.setBounds (570, 50, 110, 25);
		btnUbahMaster.setBounds (570, 80, 110, 25);
		btnHapusMaster.setBounds (570, 110, 110, 25);
		btnBersihMaster.setBounds (570, 140, 110, 25);

		btnTambahDetil.setBounds (570, 220, 110, 25);
		btnUbahDetil.setBounds (570, 250, 110, 25);
		btnHapusDetil.setBounds (570, 280, 110, 25);
		btnBersihDetil.setBounds (570, 310, 110, 25);
		btnSelesaiDetil.setBounds (570, 340, 110, 25);

		// instansiasi objek tabel
		tabMode = new DefaultTableModel(null,strJdl);
		tabel.setModel(tabMode);
		skrTabel.getViewport().add(tabel);
		tabel.setEnabled(true);
		skrTabel.setBounds (70, 250, 470, 115);	//batasan scroll.

		// mengatur listener interaksi terhadap objek
		focusLis fA = new focusLis();
		
		txtNo_Pesan.addFocusListener (fA);
		txtKode_Pelanggan.addFocusListener (fA);
		txtKode_Barang.addFocusListener (fA);

		actionLis aL = new actionLis();
		
		btnTambahMaster.addActionListener (aL);
		btnUbahMaster.addActionListener (aL);
		btnHapusMaster.addActionListener (aL);
		btnBersihMaster.addActionListener (aL);

		btnTambahDetil.addActionListener (aL);
		btnUbahDetil.addActionListener (aL);
		btnHapusDetil.addActionListener (aL);
		btnBersihDetil.addActionListener (aL);
		btnSelesaiDetil.addActionListener (aL);

		// membatasi user menginput hanya bilangan saja 
		// pada textfield harga dan jumlah.
		txtHarga.addKeyListener (new KeyAdapter() {
			public void keyTyped (KeyEvent ke) {
				char c = ke.getKeyChar ();
				if (!((Character.isDigit (c) || (c == KeyEvent.VK_BACK_SPACE)))) {
					getToolkit().beep (); ke.consume ();
      			}
    		}
  		} );

		txtJumlah.addKeyListener (new KeyAdapter() {
			public void keyTyped (KeyEvent ke) {
				char c = ke.getKeyChar ();
				if (!((Character.isDigit (c) || (c == KeyEvent.VK_BACK_SPACE)))) {
					getToolkit().beep (); ke.consume ();
      			}
    		}
  		} );


		//Mengatur seluruh kontrol pada objek panel.
		jpPesanan.add (skrTabel);
		
		jpPesanan.add (lblMaster);	
		jpPesanan.add (lblDetil);	
		jpPesanan.add (lblInfoTanggal);	
	
		jpPesanan.add (lblNo_Pesan);	
		jpPesanan.add (lblKode_Pelanggan);	
		jpPesanan.add (lblNama_Pelanggan);	
		jpPesanan.add (lblTgl_Pesan);	
		
		jpPesanan.add (lblKode_Barang);	
		jpPesanan.add (lblNama_Barang);	
		jpPesanan.add (lblSatuan);	
		jpPesanan.add (lblHarga);	
		jpPesanan.add (lblJumlah);	
		
		jpPesanan.add (txtNo_Pesan);	
		jpPesanan.add (txtKode_Pelanggan);	
		jpPesanan.add (txtNama_Pelanggan);	
		jpPesanan.add (txtTgl_Pesan);	
		
		jpPesanan.add (txtKode_Barang);	
		jpPesanan.add (txtNama_Barang);	
		jpPesanan.add (txtSatuan);	
		jpPesanan.add (txtHarga);	
		jpPesanan.add (txtJumlah);	
		
		jpPesanan.add (btnTambahMaster);	
		jpPesanan.add (btnUbahMaster);	
		jpPesanan.add (btnHapusMaster);	
		jpPesanan.add (btnBersihMaster);	
		
		jpPesanan.add (btnTambahDetil);	
		jpPesanan.add (btnUbahDetil);	
		jpPesanan.add (btnHapusDetil);	
		jpPesanan.add (btnBersihDetil);	
		jpPesanan.add (btnSelesaiDetil);

		getContentPane().add (jpPesanan);
		SetingAwal();
		setVisible (true);
	}		
  
	
	// metode untuk memeriksa isi objek ke database
    class focusLis implements FocusListener {
	    public void focusGained (FocusEvent fe) { }
		public void focusLost (FocusEvent fe) {
			if (fe.getSource()==txtNo_Pesan) {
				if (txtNo_Pesan.getText().equals ("")) { }
				else {
					CariPesan();
				}
			}
			if (fe.getSource()==txtKode_Pelanggan){
				if (txtKode_Pelanggan.getText().equals ("")) { }
				else {
					CariPelanggan();
				}
			}
			if (fe.getSource()==txtKode_Barang) {
				if (txtKode_Barang.getText().equals ("")) { }
				else {
					CariDetil();
				}
			}
			
		}
    }

	// class saat user melakukan action penekanan tombol
	class actionLis implements ActionListener{
		public void actionPerformed (ActionEvent ae) {
			if (ae.getSource() == btnTambahDetil) 	{	TambahDetil();	}
			if (ae.getSource() == btnUbahDetil) 	{	UbahDetil();	}
			if (ae.getSource() == btnHapusDetil) 	{	HapusDetil();	}
			if (ae.getSource() == btnBersihDetil) 	{	bersihDetil ();	}
			if (ae.getSource() == btnSelesaiDetil) 	{	SetingAwal ();	}
			if (ae.getSource() == btnTambahMaster) 	{	TambahMaster ();}
			if (ae.getSource() == btnUbahMaster) 	{	UbahMaster ();	}
			if (ae.getSource() == btnHapusMaster) 	{	HapusMaster ();	}
			if (ae.getSource() == btnBersihMaster) 	{	SetingAwal ();	}
		}
	}
	
	
	// objek saat tombol Isi Barang diklik
	void SetingAwal () {
		// mengosongkan objek input
		txtNo_Pesan.setText("");
		txtKode_Pelanggan.setText("");	
		txtNama_Pelanggan.setText("");		
		txtTgl_Pesan.setText("");	
		txtKode_Barang.setText("");	
		txtNama_Barang.setText("");	
		txtSatuan.setText("");	
		txtHarga.setText("");	
		txtJumlah.setText("");	
		
		// mengaktifkan objek input
		txtNo_Pesan.setEnabled(true);
		txtKode_Pelanggan.setEnabled(false);	
		txtNama_Pelanggan.setEnabled(false);		
		txtTgl_Pesan.setEnabled(false);		
		txtKode_Barang.setEnabled(false);	
		txtNama_Barang.setEnabled(false);	
		txtSatuan.setEnabled(false);	
		txtHarga.setEnabled(false);		
		txtJumlah.setEnabled(false);	
		
		// menonaktifkan objek button
		btnTambahMaster.setEnabled(false);	
		btnUbahMaster.setEnabled(false);	
		btnHapusMaster.setEnabled(false);
		btnBersihMaster.setEnabled(false);	
		btnTambahDetil.setEnabled(false);	
		btnUbahDetil.setEnabled(false);	
		btnHapusDetil.setEnabled(false);	
		btnBersihDetil.setEnabled(false);	
		btnSelesaiDetil.setEnabled(false);	
		
		// membersihkan isi tabel
		hapusTabel();
		
		// menempatkan focus pada text no. pesan
		txtNo_Pesan.requestFocus ();
		
	}
	
	// metode cari pesan
	void CariPesan(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "SELECT * FROM Pesanan WHERE No_Pesan ='" + txtNo_Pesan.getText () + "'";
	   		ResultSet rs = st.executeQuery(sql);
			if(rs.next())	{
				txtNo_Pesan.setText ("" + rs.getString ("No_Pesan"));
				txtKode_Pelanggan.setText ("" + rs.getString ("Kode_Pelanggan"));
				txtTgl_Pesan.setText (""+ rs.getString ("Tgl_Pesan").substring(0,10));
				btnTambahMaster.setEnabled(false);
				btnUbahMaster.setEnabled(true);
				btnHapusMaster.setEnabled(true);
				btnBersihMaster.setEnabled(true);
	   			rs.close();
 	  			con.close();
				CariPelanggan();
				tampilketabel();
			}
			else {
				btnTambahMaster.setEnabled(true);
				btnUbahMaster.setEnabled(false);
				btnHapusMaster.setEnabled(false);
				btnBersihMaster.setEnabled(true);
			}
			txtKode_Pelanggan.setEnabled(true);	
			txtTgl_Pesan.setEnabled(true);		
			txtKode_Pelanggan.requestFocus ();
		}
		catch(SQLException e) {
		}
	}
	
	// metode cari pelanggan
	void CariPelanggan(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "SELECT * FROM Pelanggan WHERE Kode_Pelanggan ='" + txtKode_Pelanggan.getText () + "'";
	   		ResultSet rs = st.executeQuery(sql);
			if(rs.next())	{
				txtNama_Pelanggan.setText ("" + rs.getString ("Nama"));
			}
			else {
	    		JOptionPane.showMessageDialog(this, "Kode Pelanggan tidak ditemukan");
			}
   			rs.close();
   			con.close();
		}
		catch(SQLException e) {
		}
	}

	// metode cari detil pesan
	void CariDetil(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "SELECT * FROM Isi WHERE No_Pesan='"+txtNo_Pesan.getText()+ "' and Kode_Barang ='" + txtKode_Barang.getText () + "'";
	   		ResultSet rs = st.executeQuery(sql);
			if(rs.next())	{
				txtJumlah.setText ("" + rs.getString ("Jumlah"));
				btnTambahDetil.setEnabled(false);
				btnUbahDetil.setEnabled(true);
				btnHapusDetil.setEnabled(true);
				btnBersihDetil.setEnabled(true);
				btnSelesaiDetil.setEnabled(true);
			}
			else {
				btnTambahDetil.setEnabled(true);
				btnUbahDetil.setEnabled(false);
				btnHapusDetil.setEnabled(false);
				btnBersihDetil.setEnabled(true);
				btnSelesaiDetil.setEnabled(true);
			}
	   		rs.close();
 	  		con.close();
			CariBarang();
			txtJumlah.requestFocus ();
		}
		catch(SQLException e) {
		}
	}

	// metode cari barang
	void CariBarang(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "SELECT * FROM Barang WHERE Kode_Barang ='" + txtKode_Barang.getText () + "'";
	   		ResultSet rs = st.executeQuery(sql);
			if(rs.next())	{
				txtNama_Barang.setText ("" + rs.getString ("Nama"));
				txtSatuan.setText ("" + rs.getString ("Satuan"));
				txtHarga.setText ("" + rs.getString ("Harga"));
			}
			else {
	    		JOptionPane.showMessageDialog(this, "Kode Barang tidak ditemukan");
			}
   			rs.close();
   			con.close();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk menambahkan data ke tabel Pesanan
	void TambahMaster(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "insert into Pesanan(No_Pesan,Kode_Pelanggan,Tgl_Pesan) values('"+txtNo_Pesan.getText()+"','"+txtKode_Pelanggan.getText()+"','"+txtTgl_Pesan.getText()+"')";
	   		int rows = st.executeUpdate(sql);
			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "No. Pesanan sudah ditambahkan.........");
   			con.close();
			nonAktifMaster();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk merubah data yang ada pada tabel Pesanan
	void UbahMaster(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "update Pesanan set Kode_Pelanggan='"+txtKode_Pelanggan.getText()+"',Tgl_Pesan='"+txtTgl_Pesan.getText()+"' where No_Pesan='"+txtNo_Pesan.getText()+"' ";
	   		int rows = st.executeUpdate(sql);
			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "No. Pesanan sudah diubah.........");
   			con.close();
			tampilketabel();
			nonAktifMaster();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk menghapus data dari tabel Pesanan
	void HapusMaster(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "delete from Pesanan where No_Pesan='"+txtNo_Pesan.getText()+"' ";		   		
			int rows = st.executeUpdate(sql);
			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "No. Pesanan sudah dihapus.........");
   			con.close();
   			HapusAllDetil();
 			SetingAwal ();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk menghapus semua detil pesanan 
	// pada tabel isi, yang sesuai dengan no pesan 
	void HapusAllDetil(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "delete from isi where No_Pesan='"+txtNo_Pesan.getText()+"' ";		   		
			int rows = st.executeUpdate(sql);
			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "Semua Barang untuk No. Pesanan ini sudah ditambahkan.........");
   			con.close();
			bersihDetil();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk menambah detil pesanan ke tabel isi
	void TambahDetil(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "insert into Isi(No_Pesan,Kode_Barang,harga,jumlah) values('"+txtNo_Pesan.getText()+"','"+txtKode_Barang.getText()+"',"+txtHarga.getText()+","+txtJumlah.getText()+")";
	   		int rows = st.executeUpdate(sql);
 			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "Item Barang sudah ditambahkan.........");
  			con.close();
			tampilketabel();
			bersihDetil();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk merubah detil pesanan di tabel isi
	void UbahDetil(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "update Isi set Jumlah="+txtJumlah.getText()+" Where No_Pesan='"+txtNo_Pesan.getText()+ "' and Kode_Barang ='" + txtKode_Barang.getText () + "'";		   		
			int rows = st.executeUpdate(sql);
  			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "Item Barang sudah diubah.........");
  			con.close();
			tampilketabel();
			bersihDetil();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk menghapus detil pesanan dari tabel isi
	void HapusDetil(){
		try	{
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
	   		String sql = "delete from isi Where No_Pesan='"+txtNo_Pesan.getText()+ "' and Kode_Barang ='" + txtKode_Barang.getText () + "'";	   		
			int rows = st.executeUpdate(sql);
  			if (rows == 1)
  	    		JOptionPane.showMessageDialog(this, "Item Barang sudah dihapus.........");
  			con.close();
			tampilketabel();
			bersihDetil();
		}
		catch(SQLException e) {
		}
	}

	// metode untuk menonaktifkan objek master
	void nonAktifMaster(){
		txtKode_Barang.setEnabled(true);
		txtJumlah.setEnabled(true);
		btnTambahMaster.setEnabled(false);
		btnUbahMaster.setEnabled(false);
		btnHapusMaster.setEnabled(false);
		btnBersihMaster.setEnabled(false);
		txtNo_Pesan.setEnabled(true);
		txtKode_Pelanggan.setEnabled(false);	
		txtNama_Pelanggan.setEnabled(false);		
		txtTgl_Pesan.setEnabled(false);	
		btnSelesaiDetil.setEnabled(true);	
		btnBersihDetil.setEnabled(true);
		txtKode_Barang.requestFocus ();
	}

	// metode untuk menonaktifkan dan membersihkan isi objek detil
	void bersihDetil(){
		txtKode_Barang.setText("");
		txtJumlah.setText("");
		txtSatuan.setText("");
		txtHarga.setText("");
		txtKode_Barang.setEnabled(true);
		txtJumlah.setEnabled(true);
		btnTambahDetil.setEnabled(false);
		btnUbahDetil.setEnabled(false);
		btnHapusDetil.setEnabled(false);
		txtKode_Barang.requestFocus();
	}
	
 	// menampilkan data ke tabel
 	void tampilketabel(){
		try{
			hapusTabel();
	   		Koneksi ObjKoneksi = new Koneksi();
	   		Connection con = ObjKoneksi.bukaKoneksi();
	   		Statement st = con.createStatement();
			String sql = "select isi.kode_barang, barang.nama, barang.satuan, isi.harga, isi.jumlah from isi, barang where isi.No_Pesan='"+txtNo_Pesan.getText()+"' and isi.kode_barang=barang.kode_barang" ;
			ResultSet rs = st.executeQuery(sql);
			while(rs.next()){
				 		
				String Kode_Barang = rs.getString("Kode_Barang");
				String Nama = rs.getString("Nama");
				String Satuan = rs.getString("Satuan");
				String Harga = rs.getString("Harga");
				String Jumlah = rs.getString("Jumlah");
				String Total = ""+(Integer.parseInt(Harga) * Integer.parseInt(Jumlah));
				String[] data = {"",Kode_Barang,Nama,Satuan,Harga,Jumlah, Total};
				tabMode.addRow(data);	
				resetNo();
			}
	   		rs.close();
 	  		con.close();
		}
		catch(Exception e){
		}
 	}
 	
 	// mengatur kembali penomoran tabel
	void resetNo(){
		int brs = tabMode.getRowCount();
		for(int i=0;i<brs;i++){
			String no = String.valueOf(i+1);
			tabMode.setValueAt(no+".",i,0);
		}
	}
	
	// mengosongkan isi tabel
	void hapusTabel(){
		int brs = tabMode.getRowCount();
		for(int i=0;i<brs;i++){
			tabMode.removeRow(0);
		}
	}
	
}